import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';
import { HttpExceptionInterceptor } from './common/interceptors/http-exception.interceptor';
import { AllExceptionsFilter } from './common/filters/all-exceptions.filter';
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
   // 注册全局拦截器
   app.useGlobalInterceptors(new HttpExceptionInterceptor());
  
   // 注册全局异常过滤器
   app.useGlobalFilters(new AllExceptionsFilter());
  app.useGlobalPipes(new ValidationPipe({
    // 开启字段白名单验证 可以剔除掉上传对象中的不在DTO中的字段
    whitelist: true,
    // 当不在请求对象中包含不在白名单的字段时拒绝这个请求并提示 与 whitelist 组合使用
    forbidNonWhitelisted: true,
    // 开启DTO转换 使的 请求对象 与 DTO 匹配时的instanceof 为 true
    //  如果@Param('id') id:number，transform配置将试图把id转化成number，而不是经由网络后的字符串id
    transform: true,
    transformOptions: {
      // 开启全局隐式转换 可以省略@Type修饰符 隐式指定所有DTO都使用Type修饰符
      enableImplicitConversion: true,
    }
  }));
  // 允许跨域
  app.enableCors();
  await app.listen(process.env.PORT ?? 3000);
}
bootstrap();
